package com.joysuch.wwyt.config.mybatis;


import com.baomidou.mybatisplus.annotation.DbType;
import com.baomidou.mybatisplus.core.toolkit.StringPool;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.InjectionConfig;
import com.baomidou.mybatisplus.generator.config.*;
import com.baomidou.mybatisplus.generator.config.po.TableInfo;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;
import com.baomidou.mybatisplus.generator.engine.VelocityTemplateEngine;

import java.util.ArrayList;
import java.util.List;

/**
 * mybatis代码生成器
 * 使用步骤：1修改作者，2修改包名，3修改需要生成的表名
 * Created by jingwk on 2021/03/26.
 */
public class MybatisCodeGenerator {

    public static void main(String[] args) {

        generatorCode("zqw", "risk", "wwyt_risk_item_eval_count_record");

    }

    /**
     * 代码生成
     *
     * @param auth       作者
     * @param moduleName 模块包名
     * @param tableName  表名
     */
    private static void generatorCode(final String auth, final String moduleName, final String tableName) {
        // 代码生成器
        AutoGenerator mpg = new AutoGenerator();

        // 全局配置
        GlobalConfig gc = new GlobalConfig();
        String projectPath = System.getProperty("user.dir");
        gc.setOutputDir(projectPath + "/src/main/java");
        //修改作者
        gc.setAuthor(auth);
        gc.setOpen(false);//生成后是否打开资源管理器
        gc.setServiceName("%sService"); //去掉Service接口的首字母I
        gc.setFileOverride(false); //重新生成时文件是否覆盖
        gc.setSwagger2(true);//开启Swagger2模式
        mpg.setGlobalConfig(gc);


        // 数据源配置
        DataSourceConfig dsc = new DataSourceConfig();
 //       dsc.setUrl("jdbc:mysql://192.168.0.134:26316/wwyt_201?characterEncoding=utf8");
//        dsc.setUrl("jdbc:mysql://192.168.0.134:26316/wwyt_201?characterEncoding=utf8");
        dsc.setUrl("jdbc:mysql://localhost:3306/2163b?characterEncoding=utf8");
        // dsc.setSchemaName("public");
        dsc.setDriverName("com.mysql.jdbc.Driver");
        dsc.setUsername("root");
//        dsc.setPassword("Password2017");
        dsc.setPassword("joysuch");
        dsc.setDbType(DbType.MYSQL);
        mpg.setDataSource(dsc);

        // 包配置
        PackageConfig pc = new PackageConfig();
        //文件存放包名
        //修改包名
        pc.setModuleName(moduleName);
        pc.setParent("com.joysuch.wwyt");
        mpg.setPackageInfo(pc);

        // 自定义配置
        InjectionConfig cfg = new InjectionConfig() {
            @Override
            public void initMap() {
            }
        };
        String templatePath = "/templates/mapper.xml.vm";
        List<FileOutConfig> focList = new ArrayList<>();
        focList.add(new FileOutConfig(templatePath) {
            @Override
            public String outputFile(TableInfo tableInfo) {
                // 自定义输入文件名称
                return projectPath + "/src/main/resources/mapper/" + pc.getModuleName()
                        + "/" + tableInfo.getEntityName() + "Mapper" + StringPool.DOT_XML;
            }
        });
        cfg.setFileOutConfigList(focList);
        mpg.setCfg(cfg);
        mpg.setTemplate(new TemplateConfig().setXml(null));

        // 策略配置
        StrategyConfig strategy = new StrategyConfig();
        strategy.setNaming(NamingStrategy.underline_to_camel);
        strategy.setColumnNaming(NamingStrategy.underline_to_camel);
        //Entity父类
        strategy.setSuperEntityClass("com.joysuch.wwyt.common.entity.UserDataEntity");
        strategy.setEntityLombokModel(true);
        //strategy.setSuperControllerClass("com.joysuch.wwyt.BaseController");
        //修改表名
        strategy.setInclude(tableName);
        //过滤父类字段
        strategy.setSuperEntityColumns("CREATE_TIME", "UPDATE_TIME", "DELETE_FLAG", "ORG_CODE", "TENENT_ID", "CREATE_BY", "UPDATE_BY");
        strategy.setControllerMappingHyphenStyle(true);
        //过滤表名前缀
        strategy.setTablePrefix("wwyt_");
        mpg.setStrategy(strategy);
        // 选择引擎需要指定如下，注意 pom 依赖必须有！
        mpg.setTemplateEngine(new VelocityTemplateEngine());
        mpg.execute();
    }
}

